{
  "displayName":    "Java",
  "name":           "java",
  "mimeTypes":      ["text/x-java"],
  "fileExtensions": ["java"],
  
  "lineComment":      "//",   
  "blockCommentStart": "/*",
  "blockCommentEnd":   "*/",

  
  

  "keywords": [
    "abstract", "continue", "for", "new", "switch", "assert", "default", 
    "goto", "package", "synchronized", "boolean", "do", "if", "private", 
    "this", "break", "double", "implements", "protected", "throw", "byte", 
    "else", "import", "public", "throws", "case", "enum", "instanceof", "return", 
    "transient", "catch", "extends", "int", "short", "try", "char", "final", 
    "interface", "static", "void", "class", "finally", "long", "strictfp", 
    "volatile", "const", "float", "native", "super", "while", "true", "false"
  ],
  
  "extraKeywords": [],

  "typeKeywords": [
    "boolean", "double", "byte", "int", "short", "char", "void", "long", "float"
  ],
  
  "extraTypeKeywords": [],

  "operators": [
    "=", ">", "<", "!", "~", "?", ":", 
    "==", "<=", ">=", "!=", "&&", "||", "++", "--", 
    "+", "-", "*", "/", "&", "|", "^", "%", "<<", 
    ">>", ">>>", "+=", "-=", "*=", "/=", "&=", "|=", 
    "^=", "%=", "<<=", ">>=", ">>>="
  ],
  
  "keywordOperators": [],
  "typeOperators": [],
  "extraOperators": [],

  
  "symbols":  "[=><!~?:&|+\\-*\\/\\^%]+",
  "escapes":  "\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})",
    
  
  "tokenizer": {
    "root": [
      
      ["[a-z_$][\\w$]*", { "cases": { "@extraTypeKeywords": "keyword.type.extra",
                                   "@typeKeywords": "keyword.type",
                                   "@extraKeywords": "keyword.extra",
                                   "@keywords": "keyword",
                                   "@default": "identifier" } }],
      ["[A-Z][\\w\\$]*", "type.identifier" ],  
      
      
      { "include": "@whitespace" },
      
      
      ["[{}()\\[\\]]", "@brackets"],
      ["[<>](?!@symbols)", "@brackets"],
      ["@symbols", { "cases": { "@keywordOperators": "operator.keyword",
                              "@typeOperators": "operator.type",
                              "@extraOperators": "operator.extra",
                              "@operators": "operator", 
                              "@default"  : "" } } ],

      
      
      
      ["@\\s*[a-zA-Z_\\$][\\w\\$]*", { "token": "meta", "log": "meta token: $0" }], 
      
      
      ["\\d*\\.\\d+([eE][\\-+]?\\d+)?[fFdD]?", "number.float"],
      ["0[xX][0-9a-fA-F_]*[0-9a-fA-F][Ll]?", "number.hex"],
      ["0[0-7_]*[0-7][Ll]?", "number.octal"],
      ["0[bB][0-1_]*[0-1][Ll]?", "number.binary"],
      ["\\d+[lL]?", "number"],

      
      ["[;,.]", "delimiter"],
      
      
      ["\"([^\"\\\\]|\\\\.)*$", "string.invalid" ],  
      ["\"",  "string", "@string" ],
      
      
      ["'[^\\\\']'", "string"],
      ["(')(@escapes)(')", ["string","string.escape","string"]],
      ["'", "string.invalid"]
    ],

    "whitespace": [
      ["[ \\t\\r\\n]+", "white"],
      ["\\/\\*",       "comment", "@comment" ],
      ["\\/\\/.*$",    "comment"]
    ],

    "comment": [
      ["[^\\/*]+", "comment" ],
      
      ["\\/\\*",    "comment.invalid" ],
      ["\\*/",    "comment", "@pop"  ],
      ["[\\/*]",   "comment" ]
    ],  

    "string": [
      ["[^\\\\\"]+",  "string"],
      ["@escapes", "string.escape"],
      ["\\\\.",      "string.escape.invalid"],
      ["\"",        "string", "@pop" ]
    ]
  }
}